package cn.molu.jsoup.util;

import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.MD5;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.io.FileWriter;
import java.nio.charset.StandardCharsets;
import java.util.Collection;
import java.util.Map;

/**
 * @author 陌路
 * @apiNote 操作文件工具类
 * @date 2024/1/16 13:59
 * @tool Created by IntelliJ IDEA
 */
@Slf4j
public class FileUtil {

    /**
     * 文件保存路径地址
     */
    public static final String FILE_PATH = "D:/Code/picture/sougou/";

    /**
     * 写入文件
     *
     * @param pathName 文件路径
     * @param suffix   文件类型，后缀名
     * @param data     数据集
     */
    public static void write(String pathName, String suffix, String data) {
        File file = new File(pathName + suffix);
        try (FileWriter writer = new FileWriter(file)) {
            writer.write(JSONUtil.toJsonStr(data));
            writer.flush();
        } catch (Exception e) {
            log.error("写入数据出错了：" + e.getMessage(), e);
        }
    }

    /**
     * 获取文件路径
     *
     * @param filePath 文件路径
     * @return 文件路径
     */
    public static String getFilePath(String filePath) {
        filePath = StrUtil.isBlank(filePath) ? "" : filePath + "/";
        DateTime dateTime = new DateTime();
        String currentDate = dateTime.toString(DatePattern.NORM_DATE_PATTERN);
        return FILE_PATH + filePath + currentDate + "/";
    }

    /**
     * 获取文件名
     *
     * @param title 标题
     * @return 文件名
     */
    public static String getFileName(String title) {
        return StrUtil.isBlank(title) ? "" : MD5.create().digestHex(title, StandardCharsets.UTF_8);
    }

    /**
     * 下载文件
     *
     * @param url      文件地址
     * @param filePath 文件路径
     * @param fileName 文件名
     * @param picUrl   图片地址
     */
    @SuppressWarnings("all")
    public static void downloadFile(String url, String filePath, String fileName, String picUrl, boolean isDownload) {
        fileName = FileUtil.getFileName(fileName);
        File file = new File(filePath + "/" + fileName + ".jpg");
        try {
            if (!file.exists()) {
                file.getParentFile().mkdirs();
                file.createNewFile();
            }
            HttpUtil.downloadFile(url, file, 15000);
        } catch (Exception e) {
            if (!isDownload) {
                downloadFile(picUrl, filePath, fileName, picUrl, true);
            }
            log.error("下载文件出错：" + e.getMessage());
        }
        System.out.println("下载完成：" + url);
    }

    /**
     * 下载文件
     *
     * @param filePath 文件路径
     * @param list     数据集
     */

    public static void downloadFile(String filePath, Collection<Map<String, String>> list) {
        list.forEach(item -> FileUtil.downloadFile(item.get("thumbUrl"), filePath, item.get("title") + item.get("picUrl"), item.get("picUrl"), false));
    }
}
